Android 关于底部导航栏遮挡问题 您所在的位置:网站首页 安卓 底部通知怎么设置 Android 关于底部导航栏遮挡问题

Android 关于底部导航栏遮挡问题

2024-07-10 23:30| 来源: 网络整理| 查看: 265

判断是否存在底部导航栏 方式一 //获取是否存在NavigationBar fun checkDeviceHasNavigationBar(context: Context): Boolean { var hasNavigationBar = false val rs = context.resources val id = rs.getIdentifier("config_showNavigationBar", "bool", "android") if (id > 0) { hasNavigationBar = rs.getBoolean(id) } try { val systemPropertiesClass = Class.forName("android.os.SystemProperties") val m = systemPropertiesClass.getMethod("get", String::class.java) val navBarOverride = m.invoke(systemPropertiesClass, "qemu.hw.mainkeys") as String if ("1" == navBarOverride) { hasNavigationBar = false } else if ("0" == navBarOverride) { hasNavigationBar = true } } catch (e: Exception) { Log.e("Exxxxxxxxxxx",e.message) e.printStackTrace() } return hasNavigationBar }

有的手机可以对底部导航栏进行设置,如果直接通过这种方式 判断会导致这类手机也默认存在底部导航栏 出现下方空白

方式二 /** * 横屏可通过 widthPixels - widthPixels2 > 0 来判断底部导航栏是否存在 * @param windowManager * @return true表示有虚拟导航栏 false没有虚拟导航栏 */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) fun isNavigationBarShow(windowManager: WindowManager): Boolean { val defaultDisplay = windowManager.defaultDisplay //获取屏幕高度 val outMetrics = DisplayMetrics() defaultDisplay.getRealMetrics(outMetrics) val heightPixels = outMetrics.heightPixels //宽度 val widthPixels = outMetrics.widthPixels //获取内容高度 val outMetrics2 = DisplayMetrics() defaultDisplay.getMetrics(outMetrics2) val heightPixels2 = outMetrics2.heightPixels //宽度 val widthPixels2 = outMetrics2.widthPixels return heightPixels - heightPixels2 > 0 || widthPixels - widthPixels2 > 0 }

这个是网上找到通过 虚拟导航栏的高度 = 屏幕高度 - 内容高度 这个公式来判断 当有虚拟导航栏时 屏幕高度 - 内容高度为0 反之则>0

获取底部导航栏高度 /** * 获取底部导航栏高度 * @param context * @return */ fun getNavigationBarHeight(context: Context): Int { val resources = context.resources val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android") val height = resources.getDimensionPixelSize(resourceId) return height } 给view设置 padding val view=LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true) if(isNavigationBarShow(windowManager)){ view.setPadding(0, 0, 0, getNavigationBarHeight(this)); }else { view.setPadding(0, 0, 0, 0) } 参考

https://blog.csdn.net/weixin_43258668/article/details/106143639 https://www.jianshu.com/p/68e6df9d745d



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有